iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 7
1
AI & Data

[BI工具] 以Redash為資料視覺化方案之選擇與實踐系列 第 7

[Redash] MySQL 基本 query 與強大的 Table 功能

  • 分享至 

  • xImage
  •  

接續著上一篇環境安裝完畢,
再來就是要增加 Data Source,
不過赫然發現 self hosted 的版本比線上少了:CSV (from URL)、Cassandra、Oracle、
ScyllaDB、Snoflake,是有多出 Sqlite (Python 的部分還要特別設定,後續章節會再介紹),
不知道後面有沒有時間來的去研究線上多出的這些是官方文件寫錯,
還是跟 Python 一樣要特別設定才能支援。

這次串接和 Redash 體驗那篇文章中 NBA dataset 同一個 MySQL server,
只不過這次換成了 IMDB 來試試
https://relational.fit.cvut.cz/dataset/IMDb

https://ithelp.ithome.com.tw/upload/images/20181015/20111638TXEFzKkJiM.png

可以發覺不管哪個 dataset , host、帳密等都一樣,不同的點是 database,
那在 Redash 之中,雖然設定頁面 Database Name 必填,
但其實如果 host、帳密相同,而且有同樣的權限,是可以只要設定一個 Datasource ,
在 Query 裡面透過指定 database 的方式也是可以跨 db 搜尋

https://ithelp.ithome.com.tw/upload/images/20181015/20111638yegl114cWO.png

可以看到在 Query 介面中,最左方區塊是 Datasource,
以我們剛建立的 RELATIONAL 為例,雖然 Database Name 填的是 imdb_ijs
照理說只會顯示 directors_genres, directors, movies_directors,
movies_genres, movies, roles, actors 這幾張 table,
但如果以「movie」下去 filter,會看到其他 database 的 table 以及相關欄位,
他的名稱會以「db_name.table_name」的方式呈現,也是同樣能直接以SQL去query。

eg. 以下例子是搜尋 database 為 imdb_small 的 directors 這張 table

SELECT * FROM imdb_small.directors

而在如果 query 的 db 是和 datasource 設定的相同,
是可以省略 db 直接寫 table 名稱就好

SELECT * FROM movies

按下 Execute 就可以 query 出結果

https://ithelp.ithome.com.tw/upload/images/20181015/20111638xWXauSIRuq.png

以 IMDB dataset 來說,
大家看電影除了電影內容之外,演員也是一個很重要的元素
我們就來 query 出 movies 與 actors 的資料,
也一起體驗 Redash 預設 Visualization 但很強大的 Table 功能

SELECT movies.name AS movie,
       CONCAT("<a href='https://www.imdb.com/find?q=",movies.name,"' target='_blank'>search on IMDB</a>" ) as search,
       movies.year, CONCAT(actors.first_name,' ',actors.last_name) AS actor
FROM movies
INNER JOIN roles ON movies.id = roles.movie_id
INNER JOIN actors ON roles.actor_id = actors.id
WHERE movies.year > 2002
ORDER BY year DESC
LIMIT 1000

https://ithelp.ithome.com.tw/upload/images/20181015/20111638b9fZVnesJt.png

當然 Table 少不了的排序功能,就算 SQL 中有指定預設欄位的排序方式,
在 Redash 的 Table Visualization 也是可以單獨對某一欄位做排序。

看到這邊,會想說上面 SQL 還有跑出來的結果,為什麼要寫一段 HTML 內容在裡面,
這算是 Table Visualization 的功能之一,我們進到 「Edit Visualization」來一探究竟!

https://ithelp.ithome.com.tw/upload/images/20181015/20111638XDpo50wXyN.png

在 Table Visualization 的編輯選項中,
我們可以針對每個欄位設定是否要顯示、內容對齊方式,以及調整排列順序。

另外大部分的數字我們會習慣有千位一個逗號的格式,但很少會對年份做這種格式,
裡面也可以針對 Number format 做調整。

而 Display as 可以設定顯示的類別,像是還有 Link 可以選擇,
就可以按照 Redash 規定的 format,建立出超連結,
同時也對 Text 顯示方式支援 HTML 內容 (Allow HTML content),
因此可以看到 SQL 建立出包含 HTML 內容的 「search on IMDB」欄位,
與 使用 Link 顯示方式的 movie 欄位有相同的超連結功能。

如果欄位有勾選 「Use for Search」,
Redash 會在資料顯示的上方產生一個 search bar,針對所有的欄位找尋是否出現該關鍵字,
以圖中為例,就是找尋在 movie 或是 actor 有出現「Phoenix」的關鍵字
(不過就沒有像 jQuery DataTables 可以針對每個 column 做 searching 那麼強大)


使用案例

Redash Table 的功能基本上概括了最常用的報表功能,
個人在公司的案例是通常內部需要各種總表式的表格

eg. 訂單列表,通常希望可以搜尋顧客姓名、產品名稱,也能以下訂日期排序....etc,
不同部門可能在乎的資料欄位不同,就可以調整 Table Visualization 設定中不同的欄位顯示與排列,來達到各自的需求。

如果按照以前就是要先拉 SQL 出來,然後再套版跟調整 DataTables 的 js 參數,
然後再把連結 link 到公司內部的後台系統

Redash Table 基本上算是可以取代掉這部分的工,
只要專心取得正確的資料就好,而且也能確保同樣的 query 內容在多張報表間,
不會有重複 SQL 在各地的程式碼中出現,造成未來維護的麻煩。

ps. 文章同步發表於 Medium


上一篇
Redash 安裝
下一篇
[Redash] 圖表 Chart 基本介紹
系列文
[BI工具] 以Redash為資料視覺化方案之選擇與實踐30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言